/* 
  第12节：Symbol在对象中的作用
    我们通过场景应用的方式学习Symbol，它的意思是全局标记。我们先看看它的声明方式

  -----------------------------------------------------------------------------------
  
  声明Symbol
    我们先来回顾一下我们的数据类型，在最后在看看Symbol如何声明，并进行一个数据类型的判断。

  var a = new String;
  var b = new Number;
  var c = new Boolean;
  var d = new Array;
  var e = new Object; 
  var f= Symbol();
  console.log(typeof(d));  

  -----------------------------------------------------------------------------------
  
  Symbol的打印
    我们先声明一个Symbol，然后我们在控制台输出一下。

  var g = Symbol('jspang');
  console.log(g);
  console.log(g.toString());  

  这时候我们仔细看控制台是有区别的，没有toString的是红字，toString的是黑字。

  -----------------------------------------------------------------------------------
  
  Symbol在对象中的应用
    看一下如何用Symbol构建对象的Key，并调用和赋值。

  var jspang = Symbol();
  var obj={
      [jspang]:'技术胖'
  }
  console.log(obj[jspang]);
  obj[jspang]='web';
  console.log(obj[jspang]);  

  -----------------------------------------------------------------------------------
  
  Symbol对象元素的保护作用
    在对象中有很多值，但是循环输出时，并不希望全部输出，那我们就可以使用Symbol进行保护。

  没有进行保护的写法：  
  var obj={name:'jspang',skill:'web',age:18};
  for (let item in obj){
      console.log(obj[item]);
  }

  现在我不想别人知道我的年龄，这时候我就可以使用Symbol来进行循环保护。
  let obj={name:'jspang',skill:'web'};
  let age=Symbol();
  obj[age]=18;
  for (let item in obj){
      console.log(obj[item]);
  } 
  console.log(obj);
*/

// 声明Symbol  注意第一个字母大写
let a=Symbol();
// console.log(a);  // 红色文字  Symbol()
// console.log(typeof a); //symbol 字符串


// Symbol的打印
let b=Symbol('wenfei');
// console.log(b);  //红色文字输出   Symbol(wenfei)
// console.log(b.toString());  //Symbol(wenfei) 


// Symbol在对象中的应用  --> 感觉不出来,有什么用
let wenfei=Symbol();
let obj={
  [wenfei]:'技术飞'
}
// console.log(obj[wenfei]);  //技术飞
// obj[wenfei]='web';
// console.log(obj[wenfei])  //web

// Symbol对象元素的保护作用

//没保护的写法
let obj2={name:'wenfei',skill:'web',age:18};
for(let key in obj2){
  // console.log(obj2[key]);
}

// 保护写法
let obj3={name:'wenfei',skill:'web'};
let age=Symbol();
obj3[age]=18;
for(let key in obj3){
  console.log(obj3[key]);  //输出就没有年龄
}
console.log(obj3); //{name: "wenfei", skill: "web", Symbol(): 18}
console.log(obj3[age]);  //18

